#region license
# This file is part of Grawlix.
# 
# Grawlix is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of
# the License, or (at your option) any later version.
# 
# Grawlix is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public
# License along with Grawlix.  If not, see
# <http://www.gnu.org/licenses/>.
#endregion

"""A resolver service for game URIs into embedded assembly resources."""

namespace Grawlix.Services.Resources
import System

interface IEmbeddedResolver:
"""
A service that resolves URIs into embedded assembly resources.
Remarks: Note that this considered an advanced class only intended to be
	used by those who wish to develop their own resources.
"""
	
	def Load(uri as Uri, allowLocal as bool) as object
	"""
	Load an embedded assembly resource by its URI.
	Param uri: The URI which identifies the embedded resource.
	Param allowLocal: Whether to allow local URI schemes,
		such as file:// and internal://.
	Returns: The embedded resource found.
	Raises IOException: A generic I/O error occurred.
	Raises FileNotFoundException:
		The URI could not be resolved or
		it does not point to an embedded resource.
	Remarks: Note that this is a blocking operation which should only be
		called asynchronously to avoid making the game hang. Reading from
		the stream is also a blocking operation.
	"""
	
	def TryLoad(uri as Uri, allowLocal as bool) as object
	"""
	Load an embedded assembly resource by its URI.
	Param uri: The URI which identifies the embedded resource.
	Param allowLocal: Whether to allow local URI schemes,
		such as file:// and internal://.
	Returns: The embedded resource found, or null if not found or invalid.
	Raises IOException: A generic I/O error occurred.
	Remarks: Note that this is a blocking operation which should only be
		called asynchronously to avoid making the game hang. Reading from
		the stream is also a blocking operation.
	"""
	
